package com.centriole.servicepaasuser.service.impl;

import com.centriole.common.entity.PaasApp;
import com.centriole.common.entity.PaasService;
import com.centriole.common.entity.PaasUser;
import com.centriole.servicepaasuser.dao.PaasUserMapper;
import com.centriole.servicepaasuser.service.PaasUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Arrays;
import java.util.List;

/**
 *  功   能： PaasUseService 内部用户管理Service实现
 *               【统一管理了 用户数据、应用数据、服务数据】
 *  创建人：陈默晗
 *  时   间：2018年4月11日上午11:21:43
 */
@Service
public class PaasUserServiceImpl implements PaasUserService {

    @Autowired
    PaasUserMapper paasUserMapper;

    /**
     * 添加用户
     * @param paasUser  PaasUser对象
     * @return  true表示添加成功； false表示添加失败
     */
    @Override
    public boolean addPaasUser(PaasUser paasUser) {
        if(paasUser == null) return false;
        return paasUserMapper.insertPaasUser(paasUser)>0;
    }

    /**
     * 添加服务
     * @param paasService   paasService对象
     * @return true表示添加成功； false表示添加失败
     */
    @Override
    public boolean addPaasService(PaasService paasService) {
        if(paasService == null) return false;
        return paasUserMapper.insertPaasService(paasService)>0;
    }

    /**
     * 添加应用
     * @param paasApp   paasApp对象
     * @return true表示添加成功； false表示添加失败
     */
    @Override
    public boolean addPaasApp(PaasApp paasApp) {
        if(paasApp == null) return false;
        return paasUserMapper.insertPaasApp(paasApp)>0;
    }

    /**
     * 修改用户信息
     * @param paasUser  paasUser对象
     * @return true表示修改成功； false表示修改失败
     */
    @Override
    public boolean modifyPaasUser(PaasUser paasUser) {
        if(paasUser == null) return false;
        return paasUserMapper.updatePaasUser(paasUser)>0;
    }

    /**
     * 修改服务信息
     * @param paasService  paasUser对象
     * @return true表示修改成功； false表示修改失败
     */
    @Override
    public boolean modifyPaasService(PaasService paasService) {
        if(paasService == null) return false;
        return paasUserMapper.updatePaasService(paasService)>0;
    }

    /**
     * 修改应用信息
     * @param paasApp  paasApp对象
     * @return true表示修改成功； false表示修改失败
     */
    @Override
    public boolean modifyPaasApp(PaasApp paasApp) {
        if(paasApp == null) return false;
        return paasUserMapper.updatePaasApp(paasApp)>0;
    }

    /**
     * 查询所有用户
     * @return  List< PaasUser >
     */
    @Override
    public List<PaasUser> listAllPaasUsers() {
        List<PaasUser> paasUsers = paasUserMapper.selectRAllPaasUsers();
        return paasUsers;
    }

    /**
     * 查询所有服务
     * @return  List< PaasService >
     */
    @Override
    public List<PaasService> listAllPaasServices() {
        List<PaasService> paasServices = paasUserMapper.selectAllPaasServices();
        return paasServices;
    }

    /**
     * 查询所有应用
     * @return  List< PaasApp >
     */
    @Override
    public List<PaasApp> listAllPaasApps() {
        List<PaasApp> paasApps = paasUserMapper.selectAllPaasApps();
        return paasApps;
    }

    /**
     * 根据accountName(最左匹配原则)模糊查询用户
     * @return  List< PaasApp >
     */
    @Override
    public List<PaasUser> listPaasUsersLikeAccountName(String accountName) {
        List<PaasUser> paasUsers = paasUserMapper.selectPaasUsersLikeAccountName(accountName);
        return paasUsers;
    }

    /**
     * 关联查询所有用户(包含该用户可访问的服务)
     * @return  List< PaasUser >
     */
    @Override
    public List<PaasUser> listRAllPaasUsers() {
        List<PaasUser> paasUsers = paasUserMapper.selectRAllPaasUsers();
        return paasUsers;
    }

    /**
     * 关联查询所有服务(包含 可以对其访问的用户))
     * @return  List< PaasUser >
     */
    @Override
    public List<PaasService> listRAllPaasServices() {
        List<PaasService> paasServices = paasUserMapper.selectRAllPaasServices();
        return paasServices;
    }

    /**
     * 给指定用户关联可访问的服务
     * @param userId    指定的userId
     * @param sIds  要关联服务的sId
     * @return  true表示关联成功；false表示关联失败
     */
    @Override
    public boolean relateUserAndService(String userId, String... sIds) {
        if(sIds == null || sIds.length == 0) return false;
        Arrays.asList(sIds).parallelStream().forEach(e->{
            paasUserMapper.relatePaasUserAndService(userId,e);
        });
        return true;
    }
}
